package ve.com.wayoyo.wuml_case.DibujoDiagramas;

import java.util.ArrayList;

import android.graphics.Color;

public class CompMetodo {

		private String NombreMetodo;
		private String TipoDato;
		private String NivelAcceso;
		private ArrayList<CompVariable> VariablesEntrada = new ArrayList<CompVariable>();
		private boolean _isStatic;
		private boolean _isAbstract;
		private boolean _isFinal;
		private boolean _haveMultiplicity;
		private String _leftMultiplicity;
		private String _rightMultiplicity;
		
		public boolean isStatic() {
			return _isStatic;
		}

		public void set_isStatic(boolean _isStatic) {
			this._isStatic = _isStatic;
		}

		public boolean isAbstract() {
			return _isAbstract;
		}

		public void set_isAbstract(boolean _isAbstract) {
			this._isAbstract = _isAbstract;
		}

		public boolean isFinal() {
			return _isFinal;
		}

		public void set_isFinal(boolean _isFinal) {
			this._isFinal = _isFinal;
		}

		public CompMetodo(String nombreMetodo,String nivelAcceso){
			NombreMetodo = nombreMetodo;
			NivelAcceso = nivelAcceso;
		}
		
		public void addVariable(CompVariable CompVariable){
			VariablesEntrada.add(CompVariable);
		}

		public String getNombreMetodo() {
			return NombreMetodo;
		}

		public void setNombreMetodo(String nombreMetodo) {
			NombreMetodo = nombreMetodo;
		}

		public String getTipoDato() {
			return TipoDato;
		}

		public void setTipoDato(String tipoDato) {
			TipoDato = tipoDato;
		}
		
		public String getNivelAcceso() {
			return NivelAcceso;
		}
		
		public void setNivelAcceso(String nivelAcceso) {
			NivelAcceso = nivelAcceso;
		}
		
		public String getText(){
			String Respuesta = "";
			if(NivelAcceso == "public"){
				Respuesta = "+ ";
			}else if(NivelAcceso == "private"){
				Respuesta = "- ";
			}else if(NivelAcceso == "protected"){
				Respuesta = "# ";
			}else{
				Respuesta = "";
			}
			
			Respuesta = Respuesta + NombreMetodo + "(";
			if(VariablesEntrada.size() == 0){
				Respuesta = Respuesta + ") ";
			}else{
				for (int i = 0; i < VariablesEntrada.size(); i++) {
					if(i != VariablesEntrada.size()-1){
						Respuesta = Respuesta + VariablesEntrada.get(i).getText() + ", ";
					}else{
						Respuesta = Respuesta + VariablesEntrada.get(i).getText() + ") ";
					}
				}
			}
			if(TipoDato.equals("void") == false){
				Respuesta = Respuesta + ": "+TipoDato;
			}
			if(_haveMultiplicity){
				try{
					int M = Integer.valueOf(_leftMultiplicity);
					int N;
					if(_rightMultiplicity.equals("*")){
						if(M == 1){
							Respuesta = Respuesta + "[*]";
						}else{
							Respuesta = Respuesta + "[" + M + "..*]";  
						}
					}else{
						N = Integer.valueOf(_rightMultiplicity);
						if(M == N){
							Respuesta = Respuesta + "[" + M + "]";
						}else{
							Respuesta = Respuesta + "[" + M + ".." + N + "]";
						}
					}
				}catch (Exception e) {
					System.out.println(e.getMessage());
				}
			}
			
			if(_isFinal){
				Respuesta = Respuesta + " {Final}";
			}
			
			return Respuesta;
			
		}

		public ArrayList<CompVariable> getVariablesEntrada() {
			return VariablesEntrada;
		}

		public void setVariablesEntrada(ArrayList<CompVariable> listaAtributosEntrada) {
			VariablesEntrada = listaAtributosEntrada;
		}
		
		public String generarDOM(){
			String DOM = "\t\t<Metodo Nombre=\""+NombreMetodo+"\" TipoDato=\""+TipoDato+"\" NivelAcceso=\""+NivelAcceso+"\" IsStatic=\""+_isStatic+"\" IsAbstract=\""+_isAbstract+"\" IsFinal=\""+_isFinal+"\" >\n";
			if(_haveMultiplicity)
				DOM = DOM + "\t\t\t<Multiplicidad Left=\""+_leftMultiplicity+"\" Right = \""+_rightMultiplicity+"\"/>\n";
			for (CompVariable value : VariablesEntrada) {
				DOM = DOM + value.generarDOM();
			}
			DOM = DOM + "\t\t</Metodo>\n";
			return DOM;
		}

		public String getCode(String Languaje, boolean body){
			String atrib = "";		
			if (Languaje.equals("Java")){				
				if (!getNivelAcceso().equals("default"))
					atrib = atrib+getNivelAcceso()+" ";
				if (isAbstract())
					atrib = atrib + "abstract ";
				if (isStatic())
					atrib = atrib + "static ";
				if (isFinal())
					atrib = atrib + "final ";
				atrib = atrib + getTipoDato();
				atrib = atrib + " " + getNombreMetodo()+"(";
				for (int i=0;i<getVariablesEntrada().size();i++){
					if (getVariablesEntrada().get(i).isFinal())
						atrib = atrib +"final ";
					if(i!=getVariablesEntrada().size()-1){
						atrib = atrib+getVariablesEntrada().get(i).getTipoDato();
						atrib = atrib+" "+getVariablesEntrada().get(i).getNombre()+", ";
					}else{
						atrib = atrib+getVariablesEntrada().get(i).getTipoDato();
						atrib = atrib+" "+getVariablesEntrada().get(i).getNombre();
					}						
				}
				atrib = atrib + ")";
				if (!body){
					atrib = atrib + ";";
				}else{
					atrib = atrib + "{\n";
					atrib = atrib +"\t\t // TODO Codigo auto-generado por WUML \n";
					if (!getTipoDato().equals("void")){
						if ((getTipoDato().equals("byte"))||(getTipoDato().equals("short"))
							||(getTipoDato().equals("int"))||(getTipoDato().equals("long"))
							||(getTipoDato().equals("float"))||(getTipoDato().equals("double"))
							||(getTipoDato().equals("char")))
							atrib = atrib + "\t\t return 0;\n";
						else if(getTipoDato().equals("boolean"))
							atrib = atrib + "\t\t return false;\n";
						else
							atrib = atrib + "\t\t return null;\n";
					}
					atrib = atrib + "\t}\n";
				}
			}
			return atrib;			
		}
		public char sa(){
			return 0;
			
		}
}
